package models;

import table_objects.DzienPracy;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Autor: Daniel Michalski
 * Data: 23.06.13
 */

public class HoursTableModel extends AbstractTableModel {
    private String[] columnNames;
    private List<DzienPracy> wiersze;

    public void addDzienPracy(DzienPracy dzienPracy) {
        wiersze.add(dzienPracy);
        refresh();
    }

    private void refresh() {
        fireTableDataChanged();
    }

    public HoursTableModel(List<DzienPracy> wiersze) {
        columnNames = new String[] {"Data", "Godzina przyjścia", "Godzina wyjścia", "Ilość godzin"};

        if (wiersze != null)
            this.wiersze = wiersze;
        else
            this.wiersze = new ArrayList<DzienPracy>();
    }

    public String ileGodzinWMiesiacu() {
        int hours = 0;
        int minutes = 0;
        for (DzienPracy dzienPracy : wiersze) {
            hours += dzienPracy.getWorkedHours();
            minutes += dzienPracy.getWorkedMinutes();
        }

        if (minutes > 59) {
            hours += minutes / 60;
            minutes = minutes % 60;
        }
        if (minutes < 10)
            return hours + " godz. 0" + minutes + " min.";
        else
            return hours + " godz. " + minutes + " min.";
    }

    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }

    @Override
    public int getRowCount() {
        return wiersze.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    public DzienPracy removeItem(int rowIndex) {
        DzienPracy removedItem = wiersze.remove(rowIndex);
        fireTableDataChanged();
        return removedItem;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return wiersze.get(rowIndex).getDateString();
            case 1:
                return wiersze.get(rowIndex).getStartHourString();
            case 2:
                return wiersze.get(rowIndex).getEndHourString();
            case 3:
                return wiersze.get(rowIndex).getHowManyWorkedHoursString();
            default:
                return "";
        }
    }

    public boolean czyJestJuzTakaData(Date date) {
        for (DzienPracy dzienPracy : wiersze) {
            if (date.equals(dzienPracy.getData()))
                return true;
        }
        return false;
    }

    public List<DzienPracy> getWiersze() {
        return wiersze;
    }
}
